TypeScriptã®`satisfies`æŒç®åã培åºè§£èª¬ããã®æ©èœããŠãŒã¹ã±ãŒã¹ããããŠç²Ÿå¯ãªåå¶çŽãã§ãã¯ã«ãããåŸæ¥ã®å泚éã«å¯Ÿããåªäœæ§ãæ¢ããŸãã
TypeScriptã®`satisfies`æŒç®åïŒç²Ÿå¯ãªåå¶çŽãã§ãã¯ãè§£ãæŸã€
JavaScriptã®ã¹ãŒããŒã»ããã§ããTypeScriptã¯ãéçåä»ããæäŸããŠã³ãŒãã®å質ãšä¿å®æ§ãåäžãããŸãããã®èšèªã¯ç¶ç¶çã«é²åããéçºè
äœéšãšåå®å
šæ§ãæ¹åããããã®æ°æ©èœãå°å
¥ããŠããŸãããã®ãããªæ©èœã®äžã€ããTypeScript 4.9ã§å°å
¥ãããsatisfies
æŒç®åã§ãããã®æŒç®åã¯åå¶çŽãã§ãã¯ã«ç¬èªã®ã¢ãããŒããæäŸããéçºè
ã¯å€ã®åæšè«ã«åœ±é¿ãäžããããšãªãããã®å€ãç¹å®ã®åã«æºæ ããŠããããšãä¿èšŒã§ããŸãããã®ããã°èšäºã§ã¯ãsatisfies
æŒç®åã®è€éããæãäžãããã®æ©èœããŠãŒã¹ã±ãŒã¹ããããŠåŸæ¥ã®å泚éã«å¯Ÿããå©ç¹ãæ¢ããŸãã
TypeScriptã«ãããåå¶çŽã®çè§£
åå¶çŽã¯TypeScriptã®åã·ã¹ãã ã®åºæ¬ã§ããããã«ãããå€ã®æåŸ ããã圢ç¶ãæå®ããç¹å®ã®ã«ãŒã«ã«åŸãããšãä¿èšŒã§ããŸããããã¯éçºããã»ã¹ã®æ©ã段éã§ãšã©ãŒãææããã®ã«åœ¹ç«ã¡ãã©ã³ã¿ã€ã ã®åé¡ãé²ããã³ãŒãã®ä¿¡é Œæ§ãåäžãããŸãã
åŸæ¥ãTypeScriptã¯å泚éãšåã¢ãµãŒã·ã§ã³ã䜿çšããŠåå¶çŽã匷å¶ããŸããåæ³šéã¯å€æ°ã®åãæç€ºçã«å®£èšããåã¢ãµãŒã·ã§ã³ã¯ã³ã³ãã€ã©ã«å€ãç¹å®ã®åãšããŠæ±ãããã«æç€ºããŸãã
äŸãã°ã次ã®äŸãèããŠã¿ãŸãããïŒ
interface Product {
name: string;
price: number;
discount?: number;
}
const product: Product = {
name: "Laptop",
price: 1200,
discount: 0.1, // 10%å²åŒ
};
console.log(`Product: ${product.name}, Price: ${product.price}, Discount: ${product.discount}`);
ãã®äŸã§ã¯ãproduct
倿°ã¯Product
åã§æ³šéä»ããããŠãããæå®ãããã€ã³ã¿ãŒãã§ãŒã¹ã«æºæ ããŠããããšãä¿èšŒãããŸããããããåŸæ¥ã®å泚éã䜿çšãããšãåæšè«ããã粟å¯ã§ãªããªãããšããããŸãã
satisfies
æŒç®åã®ç޹ä»
satisfies
æŒç®åã¯ãåå¶çŽãã§ãã¯ã«å¯ŸããŠãããã¥ã¢ã³ã¹ã®ããã¢ãããŒããæäŸããŸããããã«ãããæšè«ãããåãåºããããšãªããå€ãåã«æºæ ããŠããããšãæ€èšŒã§ããŸããããã¯ãå€ã®ç¹å®ã®åæ
å ±ãä¿æããªãããåå®å
šæ§ã確ä¿ã§ããããšãæå³ããŸãã
satisfies
æŒç®åã䜿çšããæ§æã¯æ¬¡ã®ãšããã§ãïŒ
const myVariable = { ... } satisfies MyType;
ããã§ãsatisfies
æŒç®åã¯å·ŠèŸºã®å€ãå³èŸºã®åã«æºæ ããŠããããšããã§ãã¯ããŸããå€ãåãæºãããªãå ŽåãTypeScriptã¯ã³ã³ãã€ã«æãšã©ãŒãçºçãããŸããããããåæ³šéãšã¯ç°ãªããmyVariable
ã®æšè«ãããåã¯MyType
ã«åºããããŸããã代ããã«ããããå«ãããããã£ãšå€ã«åºã¥ããŠããã®ç¹å®ã®åãä¿æããŸãã
satisfies
æŒç®åã®ãŠãŒã¹ã±ãŒã¹
satisfies
æŒç®åã¯ã粟å¯ãªåæ
å ±ãä¿æããªããåå¶çŽã匷å¶ãããã·ããªãªã§ç¹ã«åœ¹ç«ã¡ãŸãã以äžã«äžè¬çãªãŠãŒã¹ã±ãŒã¹ãããã€ã玹ä»ããŸãïŒ
1. ãªããžã§ã¯ãã·ã§ã€ãã®æ€èšŒ
è€éãªãªããžã§ã¯ãæ§é ãæ±ãéãsatisfies
æŒç®åã䜿çšãããšãåã
ã®ããããã£ã«é¢ããæ
å ±ã倱ãããšãªãããªããžã§ã¯ããç¹å®ã®åœ¢ç¶ã«æºæ ããŠããããšãæ€èšŒã§ããŸãã
interface Configuration {
apiUrl: string;
timeout: number;
features: {
darkMode: boolean;
analytics: boolean;
};
}
const defaultConfig = {
apiUrl: "https://api.example.com",
timeout: 5000,
features: {
darkMode: false,
analytics: true,
},
} satisfies Configuration;
// æšè«ãããåã§ç¹å®ã®ããããã£ã«åŒãç¶ãã¢ã¯ã»ã¹ã§ããŸãïŒ
console.log(defaultConfig.apiUrl); // string
console.log(defaultConfig.features.darkMode); // boolean
ãã®äŸã§ã¯ãdefaultConfig
ãªããžã§ã¯ããConfiguration
ã€ã³ã¿ãŒãã§ãŒã¹ã«å¯ŸããŠãã§ãã¯ãããŸããsatisfies
æŒç®åã¯defaultConfig
ãå¿
èŠãªããããã£ãšåãæã€ããšãä¿èšŒããŸããããããdefaultConfig
ã®åãåºããªãããããã®ããããã£ã«ç¹å®ã®æšè«ãããåã§ã¢ã¯ã»ã¹ã§ããŸãïŒäŸïŒdefaultConfig.apiUrl
ã¯stringãšããŠæšè«ãããŸãïŒã
2. 颿°ã®æ»ãå€ã«å¯Ÿããåå¶çŽã®åŒ·å¶
satisfies
æŒç®åã¯ã颿°ã®æ»ãå€ã«åå¶çŽã匷å¶ããããã«ã䜿çšã§ãã颿°å
ã®åæšè«ã«åœ±é¿ãäžããããšãªããè¿ãããå€ãç¹å®ã®åã«æºæ ããŠããããšãä¿èšŒããŸãã
interface ApiResponse {
success: boolean;
data?: any;
error?: string;
}
function fetchData(url: string): any {
// APIããããŒã¿ããã§ããããã·ãã¥ã¬ãŒã·ã§ã³
const data = {
success: true,
data: { items: ["item1", "item2"] },
};
return data satisfies ApiResponse;
}
const response = fetchData("/api/data");
if (response.success) {
console.log("Data fetched successfully:", response.data);
}
ããã§ã¯ãfetchData
颿°ãè¿ãå€ãsatisfies
æŒç®åã䜿çšããŠApiResponse
ã€ã³ã¿ãŒãã§ãŒã¹ã«å¯ŸããŠãã§ãã¯ãããŸããããã«ãããè¿ãããå€ãå¿
èŠãªããããã£ïŒsuccess
ãdata
ãerror
ïŒãæã€ããšãä¿èšŒãããŸããã颿°ãå
éšçã«å³å¯ã«ApiResponse
åã®å€ãè¿ãããšã匷å¶ããããã§ã¯ãããŸããã
3. ãããåãšãŠãŒãã£ãªãã£åã®æäœ
satisfies
æŒç®åã¯ããããåããŠãŒãã£ãªãã£åãæ±ãéã«ç¹ã«äŸ¿å©ã§ãããããã®åã倿ãã€ã€ãçµæã®å€ãç¹å®ã®å¶çŽã«æºæ ããŠããããšãä¿èšŒãããå Žåã«åœ¹ç«ã¡ãŸãã
interface User {
id: number;
name: string;
email: string;
}
// ããã€ãã®ããããã£ããªãã·ã§ãã«ã«ãã
type OptionalUser = Partial;
const partialUser = {
name: "John Doe",
} satisfies OptionalUser;
console.log(partialUser.name);
ãã®äŸã§ã¯ãPartial
ãŠãŒãã£ãªãã£åã䜿çšããŠOptionalUser
åãäœæãããUser
ã€ã³ã¿ãŒãã§ãŒã¹ã®ãã¹ãŠã®ããããã£ããªãã·ã§ãã«ã«ãªããŸããsatisfies
æŒç®åã¯ãpartialUser
ãªããžã§ã¯ããname
ããããã£ããå«ãŸãªããŠããOptionalUser
åã«æºæ ããŠããããšãä¿èšŒããããã«äœ¿çšãããŸãã
4. è€éãªæ§é ãæã€èšå®ãªããžã§ã¯ãã®æ€èšŒ
çŸä»£ã®ã¢ããªã±ãŒã·ã§ã³ã¯ããã°ãã°è€éãªèšå®ãªããžã§ã¯ãã«äŸåããŸãããããã®ãªããžã§ã¯ããåæ
å ±ã倱ãããšãªãç¹å®ã®ã¹ããŒãã«æºæ ããŠããããšãä¿èšŒããã®ã¯å°é£ãªå ŽåããããŸããsatisfies
æŒç®åã¯ãã®ããã»ã¹ãç°¡çŽ åããŸãã
interface AppConfig {
theme: 'light' | 'dark';
logging: {
level: 'debug' | 'info' | 'warn' | 'error';
destination: 'console' | 'file';
};
features: {
analyticsEnabled: boolean;
userAuthentication: {
method: 'oauth' | 'password';
oauthProvider?: string;
};
};
}
const validConfig = {
theme: 'dark',
logging: {
level: 'info',
destination: 'file'
},
features: {
analyticsEnabled: true,
userAuthentication: {
method: 'oauth',
oauthProvider: 'Google'
}
}
} satisfies AppConfig;
console.log(validConfig.features.userAuthentication.oauthProvider); // string | undefined
const invalidConfig = {
theme: 'dark',
logging: {
level: 'info',
destination: 'invalid'
},
features: {
analyticsEnabled: true,
userAuthentication: {
method: 'oauth',
oauthProvider: 'Google'
}
}
} // as AppConfig; //ããã§ãã³ã³ãã€ã«ã¯éãããã©ã³ã¿ã€ã ãšã©ãŒã®å¯èœæ§ããããSatisfiesã¯ã³ã³ãã€ã«æã«ãšã©ãŒããã£ããããã
//äžèšã®ã³ã¡ã³ãã¢ãŠããããas AppConfigã¯ãåŸã§"destination"ã䜿çšãããå Žåã«ã©ã³ã¿ã€ã ãšã©ãŒã«ã€ãªããå¯èœæ§ããããSatisfiesã¯åãšã©ãŒãæ©æã«ãã£ããããããšã§ãããé²ãã
ãã®äŸã§ã¯ãsatisfies
ã¯`validConfig`ã`AppConfig`ã¹ããŒãã«æºæ ããŠããããšãä¿èšŒããŸãããã`logging.destination`ã'invalid'ã®ãããªç¡å¹ãªå€ã«èšå®ãããå ŽåãTypeScriptã¯ã³ã³ãã€ã«æãšã©ãŒãã¹ããŒããæœåšçãªã©ã³ã¿ã€ã ã®åé¡ãé²ããŸããããã¯ãäžæ£ç¢ºãªèšå®ãäºæž¬äžèœãªã¢ããªã±ãŒã·ã§ã³ã®æåã«ã€ãªããå¯èœæ§ãããèšå®ãªããžã§ã¯ãã«ãšã£ãŠç¹ã«éèŠã§ãã
5. åœéåïŒi18nïŒãªãœãŒã¹ã®æ€èšŒ
åœéåãããã¢ããªã±ãŒã·ã§ã³ã¯ãç°ãªãèšèªã®ç¿»èš³ãå«ãæ§é åããããªãœãŒã¹ãã¡ã€ã«ãå¿
èŠãšããŸããsatisfies
æŒç®åã¯ããããã®ãªãœãŒã¹ãã¡ã€ã«ãå
±éã®ã¹ããŒãã«å¯ŸããŠæ€èšŒãããã¹ãŠã®èšèªéã§äžè²«æ§ã確ä¿ã§ããŸãã
interface TranslationResource {
greeting: string;
farewell: string;
instruction: string;
}
const enUS = {
greeting: 'Hello',
farewell: 'Goodbye',
instruction: 'Please enter your name.'
} satisfies TranslationResource;
const frFR = {
greeting: 'Bonjour',
farewell: 'Au revoir',
instruction: 'Veuillez saisir votre nom.'
} satisfies TranslationResource;
const esES = {
greeting: 'Hola',
farewell: 'Adiós',
instruction: 'Por favor, introduzca su nombre.'
} satisfies TranslationResource;
//ããŒãæ¬ èœããŠããå Žåãæ³åããŠã¿ãŠãã ããïŒ
const deDE = {
greeting: 'Hallo',
farewell: 'Auf Wiedersehen',
// instruction: 'Bitte geben Sie Ihren Namen ein.' //æ¬ èœ
} //satisfies TranslationResource; //instructionããŒãæ¬ èœããŠãããããšã©ãŒã«ãªã
satisfies
æŒç®åã¯ãåèšèªã®ãªãœãŒã¹ãã¡ã€ã«ãå¿
èŠãªãã¹ãŠã®ããŒãæ£ããåã§å«ãã§ããããšãä¿èšŒããŸããããã«ãããç°ãªããã±ãŒã«ã§ã®ç¿»èš³ã®æ¬ èœãäžæ£ãªããŒã¿åãšãã£ããšã©ãŒãé²ããŸãã
satisfies
æŒç®åã䜿çšããã¡ãªãã
satisfies
æŒç®åã¯ãåŸæ¥ã®å泚éãåã¢ãµãŒã·ã§ã³ã«æ¯ã¹ãŠããã€ãã®å©ç¹ãæäŸããŸãïŒ
- 粟å¯ãªåæšè«ïŒ
satisfies
æŒç®åã¯å€ã®ç¹å®ã®åæ å ±ãä¿æããæšè«ãããåã§ãã®ããããã£ã«ã¢ã¯ã»ã¹ã§ããŸãã - åäžããåå®å šæ§ïŒ å€ã®åãåºããããšãªãåå¶çŽã匷å¶ããéçºããã»ã¹ã®æ©ã段éã§ãšã©ãŒãææããã®ã«åœ¹ç«ã¡ãŸãã
- ã³ãŒãã®å¯èªæ§ã®åäžïŒ
satisfies
æŒç®åã¯ãå€ã®åºã«ãªãåã倿Žããããšãªãããã®åœ¢ç¶ãæ€èšŒããŠããããšãæç¢ºã«ããŸãã - ãã€ã©ãŒãã¬ãŒãã®åæžïŒ è€éãªå泚éãåã¢ãµãŒã·ã§ã³ãç°¡çŽ åããã³ãŒããããç°¡æœã§èªã¿ãããããããšãã§ããŸãã
åæ³šéããã³åã¢ãµãŒã·ã§ã³ãšã®æ¯èŒ
satisfies
æŒç®åã®å©ç¹ãããããçè§£ããããã«ãåŸæ¥ã®å泚éããã³åã¢ãµãŒã·ã§ã³ãšæ¯èŒããŠã¿ãŸãããã
åæ³šé
åæ³šéã¯å€æ°ã®åãæç€ºçã«å®£èšããŸãããããã¯åå¶çŽã匷å¶ããŸããã倿°ã®æšè«ãããåãåºããããšããããŸãã
interface Person {
name: string;
age: number;
}
const person: Person = {
name: "Alice",
age: 30,
city: "New York", // ãšã©ãŒïŒãªããžã§ã¯ããªãã©ã«ã¯æ¢ç¥ã®ããããã£ã®ã¿æå®ã§ããŸã
};
console.log(person.name); // string
ãã®äŸã§ã¯ãperson
倿°ã¯Person
åã§æ³šéä»ããããŠããŸããTypeScriptã¯person
ãªããžã§ã¯ããname
ãšage
ããããã£ãæã€ããšã匷å¶ããŸãããããããªããžã§ã¯ããªãã©ã«ãPerson
ã€ã³ã¿ãŒãã§ãŒã¹ã§å®çŸ©ãããŠããªãäœåãªããããã£ïŒcity
ïŒãå«ãã§ããããããšã©ãŒãå ±åããŸããpersonã®åã¯Personã«åºããããããå
·äœçãªåæ
å ±ã¯å€±ãããŸãã
åã¢ãµãŒã·ã§ã³
åã¢ãµãŒã·ã§ã³ã¯ãã³ã³ãã€ã©ã«å€ãç¹å®ã®åãšããŠæ±ãããã«æç€ºããŸãããããã¯ã³ã³ãã€ã©ã®åæšè«ãäžæžãããã®ã«åœ¹ç«ã¡ãŸããã誀ã£ãŠäœ¿çšãããšå±éºãªå ŽåããããŸãã
interface Animal {
name: string;
sound: string;
}
const myObject = { name: "Dog", sound: "Woof" } as Animal;
console.log(myObject.sound); // string
ãã®äŸã§ã¯ãmyObject
ã¯Animal
åã§ãããšã¢ãµãŒããããŠããŸãããããããªããžã§ã¯ããAnimal
ã€ã³ã¿ãŒãã§ãŒã¹ã«æºæ ããŠããªãã£ããšããŠããã³ã³ãã€ã©ã¯ãšã©ãŒãçºçããããæœåšçã«ã©ã³ã¿ã€ã ã®åé¡ã«ã€ãªããå¯èœæ§ããããŸããããã«ãã³ã³ãã€ã©ã«åãã€ãããšãã§ããŸãïŒ
interface Vehicle {
make: string;
model: string;
}
const myObject2 = { name: "Dog", sound: "Woof" } as Vehicle; //ã³ã³ãã€ã©ãšã©ãŒãªãïŒããã¯æªãïŒ
console.log(myObject2.make); //ã©ã³ã¿ã€ã ãšã©ãŒã®å¯èœæ§ãé«ãïŒ
åã¢ãµãŒã·ã§ã³ã¯äŸ¿å©ã§ããã誀ã£ãŠäœ¿çšãããšå±éºã§ããç¹ã«åœ¢ç¶ãæ€èšŒããªãå Žåã¯ãsatisfiesã®å©ç¹ã¯ãã³ã³ãã€ã©ã巊蟺ãå³èŸºã®åãæºããããšããã§ãã¯ããŠãããããšã§ããæºãããªãå Žåã¯ãã©ã³ã¿ã€ã ãšã©ãŒã§ã¯ãªãã³ã³ãã€ã«ãšã©ãŒãçºçããŸãã
satisfies
æŒç®å
satisfies
æŒç®åã¯ãåæ³šéãšåã¢ãµãŒã·ã§ã³ã®å©ç¹ãçµã¿åããããããã®æ¬ ç¹ãåé¿ããŸããå€ã®åãåºããããšãªãåå¶çŽã匷å¶ããåã®é©åæ§ããã§ãã¯ããããã®ãã粟å¯ã§å®å
šãªæ¹æ³ãæäŸããŸãã
interface Event {
type: string;
payload: any;
}
const myEvent = {
type: "user_created",
payload: { userId: 123, username: "john.doe" },
} satisfies Event;
console.log(myEvent.payload.userId); //number - åŒãç¶ãå©çšå¯èœã
ãã®äŸã§ã¯ãsatisfies
æŒç®åã¯myEvent
ãªããžã§ã¯ããEvent
ã€ã³ã¿ãŒãã§ãŒã¹ã«æºæ ããŠããããšãä¿èšŒããŸããããããmyEvent
ã®åãåºããªãããããã®ããããã£ïŒmyEvent.payload.userId
ãªã©ïŒã«ç¹å®ã®æšè«ãããåã§ã¢ã¯ã»ã¹ã§ããŸãã
é«åºŠãªäœ¿çšæ³ãšèæ ®äºé
satisfies
æŒç®åã®äœ¿çšã¯æ¯èŒçç°¡åã§ãããçæãã¹ãé«åºŠãªäœ¿çšã·ããªãªãèæ
®äºé
ãããã€ããããŸãã
1. ãžã§ããªã¯ã¹ãšã®çµã¿åãã
satisfies
æŒç®åã¯ãžã§ããªã¯ã¹ãšçµã¿åãããããšã§ãããæè»ã§åå©çšå¯èœãªåå¶çŽãäœæã§ããŸãã
interface ApiResponse {
success: boolean;
data?: T;
error?: string;
}
function processData(data: any): ApiResponse {
// ããŒã¿åŠçã®ã·ãã¥ã¬ãŒã·ã§ã³
const result = {
success: true,
data: data,
} satisfies ApiResponse;
return result;
}
const userData = { id: 1, name: "Jane Doe" };
const userResponse = processData(userData);
if (userResponse.success) {
console.log(userResponse.data.name); // string
}
ãã®äŸã§ã¯ãprocessData
颿°ã¯ãžã§ããªã¯ã¹ã䜿çšããŠApiResponse
ã€ã³ã¿ãŒãã§ãŒã¹ã®data
ããããã£ã®åãå®çŸ©ããŸããsatisfies
æŒç®åã¯ãè¿ãããå€ãæå®ããããžã§ããªãã¯åãæã€ApiResponse
ã€ã³ã¿ãŒãã§ãŒã¹ã«æºæ ããŠããããšãä¿èšŒããŸãã
2. å€å¥å ±çšäœïŒDiscriminated UnionsïŒã®æäœ
satisfies
æŒç®åã¯ãå€ãè€æ°ã®å¯èœãªåã®ããããã«æºæ ããŠããããšãä¿èšŒãããå€å¥å
±çšäœãæ±ãéã«ã圹ç«ã¡ãŸãã
type Shape = { kind: "circle"; radius: number } | { kind: "square"; sideLength: number };
const circle = {
kind: "circle",
radius: 5,
} satisfies Shape;
if (circle.kind === "circle") {
console.log(circle.radius); //number
}
ããã§ãShape
åã¯åãŸãã¯æ£æ¹åœ¢ã®ããããã§ããå€å¥å
±çšäœã§ããsatisfies
æŒç®åã¯ãcircle
ãªããžã§ã¯ããShape
åã«æºæ ãããã®kind
ããããã£ãæ£ãããcircleãã«èšå®ãããŠããããšãä¿èšŒããŸãã
3. ããã©ãŒãã³ã¹ã«é¢ããèæ ®äºé
satisfies
æŒç®åã¯ã³ã³ãã€ã«æã«åãã§ãã¯ãè¡ããããäžè¬çã«ã©ã³ã¿ã€ã ã®ããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ã¯ãããŸããããã ããéåžžã«å€§èŠæš¡ã§è€éãªãªããžã§ã¯ããæ±ãå Žåãåãã§ãã¯ã®ããã»ã¹ã«å°ãæéããããããšããããŸããããã¯äžè¬çã«éåžžã«äºçްãªèæ
®äºé
ã§ãã
4. äºææ§ãšããŒã«
satisfies
æŒç®åã¯TypeScript 4.9ã§å°å
¥ãããããããã®æ©èœã䜿çšããã«ã¯äºææ§ã®ããããŒãžã§ã³ã®TypeScriptã䜿çšããŠããããšã確èªããå¿
èŠããããŸããã»ãšãã©ã®çŸä»£çãªIDEãã³ãŒããšãã£ã¿ã¯TypeScript 4.9以éããµããŒãããŠãããsatisfies
æŒç®åã®ãªãŒãã³ã³ããªãŒãããšã©ãŒãã§ãã¯ãªã©ã®æ©èœãå«ãŸããŠããŸãã
å®äžçã®äŸãšã±ãŒã¹ã¹ã¿ãã£
satisfies
æŒç®åã®å©ç¹ãããã«èª¬æããããã«ãããã€ãã®å®äžçã®äŸãšã±ãŒã¹ã¹ã¿ãã£ãèŠãŠã¿ãŸãããã
1. èšå®ç®¡çã·ã¹ãã ã®æ§ç¯
ããå€§äŒæ¥ã§ã¯ã管çè
ãã¢ããªã±ãŒã·ã§ã³èšå®ãå®çŸ©ã»ç®¡çã§ããèšå®ç®¡çã·ã¹ãã ãTypeScriptã§æ§ç¯ããŠããŸããèšå®ã¯JSONãªããžã§ã¯ããšããŠä¿åãããé©çšåã«ã¹ããŒãã«å¯ŸããŠæ€èšŒãããå¿
èŠããããŸããsatisfies
æŒç®åã䜿çšããŠãèšå®ãåæ
å ±ã倱ãããšãªãã¹ããŒãã«æºæ ããŠããããšãä¿èšŒãã管çè
ãèšå®å€ãç°¡åã«ã¢ã¯ã»ã¹ã»å€æŽã§ããããã«ããŠããŸãã
2. ããŒã¿å¯èŠåã©ã€ãã©ãªã®éçº
ãããœãããŠã§ã¢äŒç€Ÿã¯ãéçºè
ãã€ã³ã¿ã©ã¯ãã£ããªãã£ãŒããã°ã©ããäœæã§ããããŒã¿å¯èŠåã©ã€ãã©ãªãéçºããŠããŸããã©ã€ãã©ãªã¯TypeScriptã䜿çšããŠããŒã¿ã®æ§é ãšãã£ãŒãã®èšå®ãªãã·ã§ã³ãå®çŸ©ããŠããŸããsatisfies
æŒç®åã䜿çšããŠããŒã¿ãšèšå®ãªããžã§ã¯ããæ€èšŒããããããæåŸ
ãããåã«æºæ ãããã£ãŒããæ£ããã¬ã³ããªã³ã°ãããããšãä¿èšŒããŠããŸãã
3. ãã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã®å®è£
ããå€åœç±äŒæ¥ã¯TypeScriptã䜿çšããŠãã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ãå®è£
ããŠããŸããåãã€ã¯ããµãŒãã¹ã¯ç¹å®ã®åœ¢åŒã§ããŒã¿ãè¿ãAPIãå
¬éããŠããŸããsatisfies
æŒç®åã䜿çšããŠAPIã¬ã¹ãã³ã¹ãæ€èšŒããããããæåŸ
ãããåã«æºæ ããã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã§ããŒã¿ãæ£ããåŠçã§ããããšãä¿èšŒããŠããŸãã
satisfies
æŒç®åã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
satisfies
æŒç®åã广çã«äœ¿çšããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ãèæ
®ããŠãã ããïŒ
- å€ã®åãåºããããšãªãåå¶çŽã匷å¶ãããå Žåã«äœ¿çšããã
- ãžã§ããªã¯ã¹ãšçµã¿åãããŠãããæè»ã§åå©çšå¯èœãªåå¶çŽãäœæããã
- ãããåããŠãŒãã£ãªãã£åãæ±ãéã«äœ¿çšããåã倿ããªããçµæã®å€ãç¹å®ã®å¶çŽã«æºæ ããããšãä¿èšŒããã
- èšå®ãªããžã§ã¯ããAPIã¬ã¹ãã³ã¹ããã®ä»ã®ããŒã¿æ§é ãæ€èšŒããããã«äœ¿çšããã
satisfies
æŒç®åãæ£ããæ©èœããããã«ãåå®çŸ©ãææ°ã®ç¶æ ã«ä¿ã€ã- åé¢é£ã®ãšã©ãŒãææããããã«ãã³ãŒãã培åºçã«ãã¹ãããã
çµè«
satisfies
æŒç®åã¯TypeScriptã®åã·ã¹ãã ãžã®åŒ·åãªè¿œå æ©èœã§ãããåå¶çŽãã§ãã¯ã«ç¬èªã®ã¢ãããŒããæäŸããŸããããã«ãããå€ã®åæšè«ã«åœ±é¿ãäžããããšãªããå€ãç¹å®ã®åã«æºæ ããŠããããšãä¿èšŒã§ããåã®é©åæ§ããã§ãã¯ããããã®ãã粟å¯ã§å®å
šãªæ¹æ³ãæäŸããŸãã
satisfies
æŒç®åã®æ©èœããŠãŒã¹ã±ãŒã¹ãå©ç¹ãçè§£ããããšã§ãTypeScriptã³ãŒãã®å質ãšä¿å®æ§ãåäžãããããå
ç¢ã§ä¿¡é Œæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸããTypeScriptãé²åãç¶ããäžã§ãsatisfies
æŒç®åã®ãããªæ°æ©èœãæ¢æ±ãæ¡çšããããšã¯ãæä»£ã®å
ãè¡ããèšèªã®ããã³ã·ã£ã«ãæå€§éã«æŽ»çšããããã«äžå¯æ¬ ã§ãã
仿¥ã®ã°ããŒãã«åããããœãããŠã§ã¢éçºã®çŸå Žã§ã¯ãåå®å
šã§ä¿å®æ§ã®é«ãã³ãŒããæžãããšãæãéèŠã§ããTypeScriptã®satisfies
æŒç®åã¯ãããã®ç®æšãéæããããã®è²ŽéãªããŒã«ãæäŸããäžçäžã®éçºè
ãçŸä»£ã®ãœãããŠã§ã¢ã®çµ¶ãéãªãå¢å€§ããèŠæ±ã«å¿ããé«å質ãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããšãå¯èœã«ããŸãã
satisfies
æŒç®åãåãå
¥ããŠãããªãã®TypeScriptãããžã§ã¯ãã§æ°ããªã¬ãã«ã®åå®å
šæ§ãšç²ŸåºŠãè§£ãæŸã¡ãŸãããã